我想重写像
这样的网址site.com/eng?sentence=a-sentence
就像:
site.com/eng/a-sentence
我只希望更改浏览器网址中显示的文字,我不想要重定向。
RewriteCond %{THE_REQUEST} ^GET\s/+eng?sentence=([^/?&\s]+) [NC]
RewriteRule ^ /eng/%1 [NC,L,NE]
我已经摆弄它,比较了我很久以来发现的其他重写规则,但是不能让它起作用,我真的无法弄清楚为什么。我试着每次测试时从我的htaccess中删除所有其他重写。
这是我的htaccess文件:
# Use PHP5.3 Single php.ini as default
AddHandler application/x-httpd-php54s .php
AddType application/x-httpd-php .htm .html
Options -Indexes -MultiViews
ErrorDocument 404 /404.php
ErrorDocument 500 /500.php
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ $1.php [L]
RewriteCond %{THE_REQUEST} ^GET\s/+eng?sentence=([^/?&\s]+) [NC]
RewriteRule ^ /eng/%1 [NC,L,NE]
<FilesMatch "\.(jpg|jpeg|png|gif|swf)$">
Header set Cache-Control "max-age=604800, public"
</FilesMatch>
最好是,如果你能修复我的规则,而不是自己写一个我不太理解的规则,那就太好了。
答案 0 :(得分:0)
我只想改变浏览器网址中显示的文字,我不想要 重定向。
要更改浏览器中的网址,您需要使用R
标记进行外部重定向。
同样?
是特殊的正则表达式符号,为了匹配文字?
,您需要像\?
一样将其转义。此外,您需要在目标URI的末尾使用?
来删除查询字符串。
RewriteEngine On
# actual oneto pretty URL - external redirect
RewriteCond %{THE_REQUEST} \s/+eng\.php\?sentence=([^&\s]+) [NC]
RewriteRule ^ /eng/%1? [L,NE,R=302]
# pretty URL to actual one - internal rewrite
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^eng/([^/]+)/?$ /eng.php?sentence=$1 [L,QSA,NC]
# To internally forward /dir/foo to /dir/foo.php
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{DOCUMENT_ROOT}/$1.php -f
RewriteRule ^(.+?)/?$ /$1.php [L]