繁体   English   中英

htacess重写规则冲突

[英]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]
  1. 第一条规则将在“招募”之后采取任何措施,并将其作为URL中的get变量传递

    www.example.com/recruitHI - > www.example.com/recruit.php?id=HI

  2. 另一个规则需要做的是将.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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM