use*_*244 11 apache .htaccess mod-rewrite
我有一个简单的.htaccess文件,其中包含以下内容.
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?s=$1 [L]
</IfModule>
Run Code Online (Sandbox Code Playgroud)
我想添加这条规则.
RewriteRule ^p$ index.php?p=
Run Code Online (Sandbox Code Playgroud)
我尝试在下面这样做,但它不起作用.似乎两条规则都在运行.我尝试了几个不同的旗帜,再次没有运气.有人可以告诉我如何使这个工作.
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^p$ index.php?p=
RewriteRule ^(.*)$ index.php?s=$1 [L]
</IfModule>
Run Code Online (Sandbox Code Playgroud)
zes*_*ssx 39
您必须添加[L]标志以在一次匹配时停止读取规则:
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^p$ index.php?p= [L]
RewriteRule ^(.*)$ index.php?s=$1 [L]
</IfModule>
Run Code Online (Sandbox Code Playgroud)
提醒RewriteRule标志:
摘自这个(非常)完整的帖子: https ://serverfault.com/questions/214512/everything-you-ever-wanted-to-know-about-mod-rewrite-rules-but-were-afraid-to-as
首先你应该知道重写条件只影响下面的重写规则,你在重写条件和重写规则之间添加了新规则,它们现在只影响你的新规则而不是旧规则(你所拥有的)你的代码是只有在目标网址不是文件或目录的情况下才会执行重写规则),所以如果你希望你的旧规则仍然受到重写条件的影响,你必须在重写之前添加新规则条件.
对于你的问题,我认为samsamX已经回答足够了(通过添加[L]标志来修复).
最后你应该有这样的事情:
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteRule ^p$ index.php?p= [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?s=$1 [L]
</IfModule>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
35933 次 |
| 最近记录: |