[英]htacess rewrite rules conflict
我在尝试设置正确的htaccess文件时遇到问题。
我基本上想要做的是实现干净的URL并隐藏除一个文件之外的.php扩展名。
我目前设置的内容如下:
Options +FollowSymLinks
RewriteEngine On
RewriteRule ^recruit(.*)$ recruit.php?id=/$1 [QSA,L]
#RewriteRule ^(?!recruit)(.*)$ $1.php [NC,L]
第一条规则将在“招募”之后采取任何措施,并将其作为URL中的get变量传递
www.example.com/recruitHI - > www.example.com/recruit.php?id=HI
另一个规则需要做的是将.php附加到除了以招募开头的任何内容之外的任何其他内容。
www.example.com/index - >将寻找index.php
www.example.com/contact - >将寻找contact.php
www.example.com/recruit - >因为第一条规则需要被忽略
当我有2个规则并启动apache时,我收到错误,说我的配置错误。 他们都是单独工作。
在开头指定RewriteBase
。 如果一切都在站点根目录中,那就是
RewriteBase /
否则你的所有规则应该以^/
开头
RewriteEngine On
RewriteBase /
RewriteRule ^recruit(.*)$ recruit.php?id=/$1 [QSA,L]
RewriteRule ^(.*)$ $1.php [NC,L]
因为你有L
所以recruit
后的规则只会影响没有它的项目。 但是,您应该考虑使用单个Front Controller,而不是为每个URL提供脚本。
RewriteEngine On
RewriteBase /
RewriteRule ^recruit(.*)$ recruit.php?id=/$1 [QSA,L]
RewriteRule ^(.*)$ index.php [NC,L]
然后你可以使用FallBack提供程序(在Apache中更新)
RewriteEngine On
RewriteBase /
RewriteRule ^recruit(.*)$ recruit.php?id=/$1 [QSA,L]
FallbackResource /index.php
您可以使用:
Options +FollowSymLinks
RewriteEngine On
RewriteRule ^recruit(.*)$ recruit.php?id=/$1 [QSA,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{DOCUMENT_ROOT}/$1\.php -f [NC]
RewriteRule ^(.+?)/?$ /$1.php [L]
第二条规则将仅为非文件或目录且已经是有效的php文件的URI添加.php
扩展名。
尝试将条件添加到第二个规则,以便它不会盲目地将php
附加到URI的末尾:
RewriteRule ^recruit(.*)$ recruit.php?id=/$1 [QSA,L]
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI}\.php -f
RewriteRule ^(.*)$ $1.php [NC,L]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.