htaccess 将 POST 消息重定向到子文件夹中的 php 文件
htaccess redirect POST message to php file in subfolder
我希望有人能帮我解决我在共享主机场景中的 htaccess 问题,所以我无法访问 httpd.conf。我正在尝试将 POST 重定向到 /process-dev.php 到正确子文件夹中的文件,如下所示,但是我的 POST 被重定向到 index.php
POST 来自网页本身(实际域名替换为 subdomain1.com)https://www.subdomain1.com.
/
|- .htaccess
|- css
|- clientscripts
|- php
|- site
|- subdomain1.com
|- language
|- default
|- process-dev.php
|- index.php
我的 htaccess 文件
<FilesMatch "^\.ht">
Require all denied
</FilesMatch>
Options +FollowSymlinks
Options -Indexes
RewriteEngine on
# Enforce SSL
RewriteCond %{HTTPS} !=on
# Handle non-www URLs
RewriteCond %{HTTP_HOST} ^subdomain1\.com [NC,OR]
# Handle www URLs
RewriteCond %{HTTP_HOST} ^www\.subdomain1\.com [NC]
RewriteRule ^(.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
RewriteCond %{REQUEST_METHOD} POST
RewriteCond %{REQUEST_URI} ^/?(process-dev|post-file-dev|post-image-dev)?$ [NC]
RewriteRule ^.*$ site/subdomain1.com/language/default/.php [L,QSA]
# Redirect all to the Application if not done already
RewriteCond %{REQUEST_URI} !^/?site/subdomain1\.com/language/default/index\.php [NC]
# or if request is a real file
RewriteCond %{REQUEST_FILENAME} !-f
# or if request is a real directory but not the root directory
RewriteCond %{REQUEST_URI} ^/?$ [OR]
RewriteCond %{REQUEST_FILENAME} !-d
# Rewrite the rest to the index.php file in your public folder
RewriteRule ^.*$ site/subdomain1.com/language/default/index.php [NC,L]
print($_server)的部分输出
map(
'ONECOM_DOMAIN_NAME'=>'subdomain1.com',
'ONECOM_DOMAIN_ROOT'=>'/customers/6/6/d/subdomain1.com/',
'SCRIPT_NAME'=>'/site/subdomain1.com/language/default/index.php',
'REQUEST_URI'=>'/process-dev.php',
'QUERY_STRING'=>'',
'REQUEST_METHOD'=>'POST',
'SERVER_PROTOCOL'=>'HTTP/1.1',
'REDIRECT_URL'=>'/process-dev.php',
'SCRIPT_FILENAME'=>'/customers/6/6/d/subdomain1.com/httpd.www/site/subdomain1.com/language/default/index.php',
'SERVER_NAME'=>'subdomain1.com',
'HTTP_REFERER'=>'https://subdomain1.com/',
'HTTP_ORIGIN'=>'https://subdomain1.com',
'HTTP_SCHEME'=>'https',
'HTTP_HOST'=>'subdomain1.com',
'HTTPS'=>'on',
'ONECOM_TMPDIR'=>'/customers/6/6/d/subdomain1.com//tmp',
'DOMAIN_NAME'=>'subdomain1.com',
'ONECOM_DOCUMENT_ROOT'=>'/customers/6/6/d/subdomain1.com/httpd.www',
'DOCUMENT_ROOT'=>'/customers/6/6/d/subdomain1.com/httpd.www',
'REDIRECT_STATUS'=>'200',
'REDIRECT_HTTPS'=>'on',
'REDIRECT_ONECOM_TMPDIR'=>'/customers/6/6/d/subdomain1.com//tmp',
'REDIRECT_ONECOM_DOMAIN_ROOT'=>'/customers/6/6/d/subdomain1.com/',
'REDIRECT_ONECOM_DOMAIN_NAME'=>'subdomain1.com',
'REDIRECT_DOMAIN_NAME'=>'subdomain1.com',
'REDIRECT_ONECOM_DOCUMENT_ROOT'=>'/customers/6/6/d/subdomain1.com/httpd.www',
'REDIRECT_DOCUMENT_ROOT'=>'/customers/6/6/d/subdomain1.com/httpd.www',
'PHP_SELF'=>'/site/subdomain1.com/language/default/index.php',
)
问题出在
RewriteCond %{REQUEST_METHOD} POST
RewriteCond %{REQUEST_URI} ^/?(process-dev|post-file-dev|post-image-dev)?$ [NC]
RewriteRule ^.*$ site/subdomain1.com/language/default/.php [L,QSA]
您正在使用 </code> 但 RewriteRule (<code>^.*$
) 中没有分组模式,您打算使用 %1
来引用早期 [=14] 中的组=].
此外,我不确定您是否真的想把 second ?
放在 RewriteCond 模式中?我怀疑您希望 uri 的那部分是可选的以便匹配此规则。
根据 Raxi 的建议,我让它适应了这个变化
RewriteCond %{REQUEST_METHOD} POST
RewriteCond %{REQUEST_URI} ^/?(process-dev\.php|post-file-dev\.php|post-image-dev\.php)$ [NC]
RewriteRule ^.*$ site/subdomain1.com/language/default/%1 [L,QSA]
感谢 MrWhite 提到这种方式 post 根据收到的反馈
问题的有效解决方案
我希望有人能帮我解决我在共享主机场景中的 htaccess 问题,所以我无法访问 httpd.conf。我正在尝试将 POST 重定向到 /process-dev.php 到正确子文件夹中的文件,如下所示,但是我的 POST 被重定向到 index.php
POST 来自网页本身(实际域名替换为 subdomain1.com)https://www.subdomain1.com.
/
|- .htaccess
|- css
|- clientscripts
|- php
|- site
|- subdomain1.com
|- language
|- default
|- process-dev.php
|- index.php
我的 htaccess 文件
<FilesMatch "^\.ht">
Require all denied
</FilesMatch>
Options +FollowSymlinks
Options -Indexes
RewriteEngine on
# Enforce SSL
RewriteCond %{HTTPS} !=on
# Handle non-www URLs
RewriteCond %{HTTP_HOST} ^subdomain1\.com [NC,OR]
# Handle www URLs
RewriteCond %{HTTP_HOST} ^www\.subdomain1\.com [NC]
RewriteRule ^(.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
RewriteCond %{REQUEST_METHOD} POST
RewriteCond %{REQUEST_URI} ^/?(process-dev|post-file-dev|post-image-dev)?$ [NC]
RewriteRule ^.*$ site/subdomain1.com/language/default/.php [L,QSA]
# Redirect all to the Application if not done already
RewriteCond %{REQUEST_URI} !^/?site/subdomain1\.com/language/default/index\.php [NC]
# or if request is a real file
RewriteCond %{REQUEST_FILENAME} !-f
# or if request is a real directory but not the root directory
RewriteCond %{REQUEST_URI} ^/?$ [OR]
RewriteCond %{REQUEST_FILENAME} !-d
# Rewrite the rest to the index.php file in your public folder
RewriteRule ^.*$ site/subdomain1.com/language/default/index.php [NC,L]
print($_server)的部分输出
map(
'ONECOM_DOMAIN_NAME'=>'subdomain1.com',
'ONECOM_DOMAIN_ROOT'=>'/customers/6/6/d/subdomain1.com/',
'SCRIPT_NAME'=>'/site/subdomain1.com/language/default/index.php',
'REQUEST_URI'=>'/process-dev.php',
'QUERY_STRING'=>'',
'REQUEST_METHOD'=>'POST',
'SERVER_PROTOCOL'=>'HTTP/1.1',
'REDIRECT_URL'=>'/process-dev.php',
'SCRIPT_FILENAME'=>'/customers/6/6/d/subdomain1.com/httpd.www/site/subdomain1.com/language/default/index.php',
'SERVER_NAME'=>'subdomain1.com',
'HTTP_REFERER'=>'https://subdomain1.com/',
'HTTP_ORIGIN'=>'https://subdomain1.com',
'HTTP_SCHEME'=>'https',
'HTTP_HOST'=>'subdomain1.com',
'HTTPS'=>'on',
'ONECOM_TMPDIR'=>'/customers/6/6/d/subdomain1.com//tmp',
'DOMAIN_NAME'=>'subdomain1.com',
'ONECOM_DOCUMENT_ROOT'=>'/customers/6/6/d/subdomain1.com/httpd.www',
'DOCUMENT_ROOT'=>'/customers/6/6/d/subdomain1.com/httpd.www',
'REDIRECT_STATUS'=>'200',
'REDIRECT_HTTPS'=>'on',
'REDIRECT_ONECOM_TMPDIR'=>'/customers/6/6/d/subdomain1.com//tmp',
'REDIRECT_ONECOM_DOMAIN_ROOT'=>'/customers/6/6/d/subdomain1.com/',
'REDIRECT_ONECOM_DOMAIN_NAME'=>'subdomain1.com',
'REDIRECT_DOMAIN_NAME'=>'subdomain1.com',
'REDIRECT_ONECOM_DOCUMENT_ROOT'=>'/customers/6/6/d/subdomain1.com/httpd.www',
'REDIRECT_DOCUMENT_ROOT'=>'/customers/6/6/d/subdomain1.com/httpd.www',
'PHP_SELF'=>'/site/subdomain1.com/language/default/index.php',
)
问题出在
RewriteCond %{REQUEST_METHOD} POST
RewriteCond %{REQUEST_URI} ^/?(process-dev|post-file-dev|post-image-dev)?$ [NC]
RewriteRule ^.*$ site/subdomain1.com/language/default/.php [L,QSA]
您正在使用 </code> 但 RewriteRule (<code>^.*$
) 中没有分组模式,您打算使用 %1
来引用早期 [=14] 中的组=].
此外,我不确定您是否真的想把 second ?
放在 RewriteCond 模式中?我怀疑您希望 uri 的那部分是可选的以便匹配此规则。
根据 Raxi 的建议,我让它适应了这个变化
RewriteCond %{REQUEST_METHOD} POST
RewriteCond %{REQUEST_URI} ^/?(process-dev\.php|post-file-dev\.php|post-image-dev\.php)$ [NC]
RewriteRule ^.*$ site/subdomain1.com/language/default/%1 [L,QSA]
感谢 MrWhite 提到这种方式 post 根据收到的反馈
问题的有效解决方案