.htaccess 中的 apache 重写不适用于托管平台
apache rewrite in .htaccess not working on hosted platform
我的问题似乎与托管平台上的 apache 设置直接相关,它由 crazydomains.com 托管。问题是我在我的开发 LAMP 上工作的重写没有在他们的 LAMP 上工作。希望在重写方面知识比我多的人能指出我的错误。
我的开发服务器上的工作重写:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^/manage/$ /manage/index.php [L,QSA]
RewriteRule ^/manage/(.+\..+)$ - [NC,L]
RewriteRule ^/manage/(.*)/$ /manage/index.php?page= [L,QSA]
RewriteRule ^/(.+\..+)$ - [NC,L]
RewriteRule ^/(.+)$ /index.php?page= [QSA]
在 crazydomains 上重写问题
RewriteEngine On
Options +FollowSymLinks
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^manage/$ /manage/index.php [L,QSA]
RewriteRule ^manage/(.+\..+)$ - [NC,L]
RewriteRule ^manage/(.*)/$ /manage/index.php?page= [L,QSA]
RewriteRule ^(.+\..+)$ - [NC,L]
RewriteRule ^(.+)$ /index.php?page= [QSA]
我想要发生的是任何以 http://example.com/manage or http://example.com/manage/ 开头的内容都会被捕获并转到 /manage/index.php,而其他任何内容都将转到站点的根目录 index.php。
出于某种原因,我发现在此托管平台上唯一匹配的规则是规则 4。当然,他们的支持甚至包括将我链接到网站以生成一个 .htaccess 文件,这对我没有帮助,因为这些都是简单的事情,而且这是一个复杂的规则。
非常感谢任何帮助!
像这样简化您的规则:
Options +FollowSymLinks
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]
RewriteRule ^manage/?$ manage/index.php [L,NC]
RewriteRule ^manage/([^.]+)/?$ manage/index.php?page= [L,QSA,NC]
RewriteRule ^([^.]+)/?$ index.php?page= [L,QSA]
我的问题似乎与托管平台上的 apache 设置直接相关,它由 crazydomains.com 托管。问题是我在我的开发 LAMP 上工作的重写没有在他们的 LAMP 上工作。希望在重写方面知识比我多的人能指出我的错误。
我的开发服务器上的工作重写:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^/manage/$ /manage/index.php [L,QSA]
RewriteRule ^/manage/(.+\..+)$ - [NC,L]
RewriteRule ^/manage/(.*)/$ /manage/index.php?page= [L,QSA]
RewriteRule ^/(.+\..+)$ - [NC,L]
RewriteRule ^/(.+)$ /index.php?page= [QSA]
在 crazydomains 上重写问题
RewriteEngine On
Options +FollowSymLinks
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^manage/$ /manage/index.php [L,QSA]
RewriteRule ^manage/(.+\..+)$ - [NC,L]
RewriteRule ^manage/(.*)/$ /manage/index.php?page= [L,QSA]
RewriteRule ^(.+\..+)$ - [NC,L]
RewriteRule ^(.+)$ /index.php?page= [QSA]
我想要发生的是任何以 http://example.com/manage or http://example.com/manage/ 开头的内容都会被捕获并转到 /manage/index.php,而其他任何内容都将转到站点的根目录 index.php。
出于某种原因,我发现在此托管平台上唯一匹配的规则是规则 4。当然,他们的支持甚至包括将我链接到网站以生成一个 .htaccess 文件,这对我没有帮助,因为这些都是简单的事情,而且这是一个复杂的规则。
非常感谢任何帮助!
像这样简化您的规则:
Options +FollowSymLinks
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]
RewriteRule ^manage/?$ manage/index.php [L,NC]
RewriteRule ^manage/([^.]+)/?$ manage/index.php?page= [L,QSA,NC]
RewriteRule ^([^.]+)/?$ index.php?page= [L,QSA]