1

我想重写像这样的网址

site.com/eng?sentence=a-sentence

像是:

site.com/eng/a-sentence

我只想更改浏览器 url 中显示的文本,我不想要重定向。

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>

最好,如果你能修正我的规则,而不是自己写一个我不太可能理解的规则,那就太好了。

4

1 回答 1

0

我只希望浏览器 url 中显示的文本改变,我不想要重定向。

R要在浏览器中更改 URL,您需要使用标志进行外部重定向。

也是?特殊的正则表达式符号,要匹配文字?,您需要像\?. 此外,您还需要?在目标 URI 的末尾添加一个来剥离查询字符串。

您完整的 .htaccess:

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]

我强烈推荐你阅读:Apache mod_rewrite 简介

于 2013-10-12T04:51:33.080 回答