.htaccess 为什么我的重写规则不重写?

.htaccess 为什么我的重写规则不重写?,.htaccess,mod-rewrite,url-rewriting,rewrite,.htaccess,Mod Rewrite,Url Rewriting,Rewrite,我想像这样重写URL 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] 我一直在摆弄它,比较我发现的其他重写规则很长一段时间,但就是不能让它工作,我真的不明白为什么。每次测

我想像这样重写URL

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>
#使用PHP5.3 Single php.ini作为默认值
AddHandler应用程序/x-httpd-php54s.php
AddType应用程序/x-httpd-php.htm.html
选项-索引-多视图
ErrorDocument 404/404.php
ErrorDocument 500/500.php
重新启动发动机
重写cond%{REQUEST_FILENAME}-D
重写cond%{REQUEST_FILENAME}\.php-f
重写规则^(.*)$$1.php[L]
RewriteCond%{THE_REQUEST}^GET\s/+eng?句子=([^/?&\s]+)[NC]
重写规则^/eng/%1[NC、L、NE]
标题集缓存控制“最大年龄=604800,公共”
最好,如果你能修改我的规则,而不是写你自己的规则,我可能不会理解,那就太好了

我只希望浏览器url中显示的文本发生更改,我不希望 重定向

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

另外,
是特殊的正则表达式符号,要匹配文本,
您需要像
\?
一样对其进行转义。此外,您还需要在目标URI的末尾添加一个
,以去除查询字符串

您的完整.htaccess:
我强烈建议你读一读:我很想相信你,但这条规则给了我500个错误。甚至当我从htaccess中删除所有其他重写规则时,该规则也会独立工作并重定向到
/localhost/eng/a-sense
。但是你有责任清理你的系统,确保没有其他的.htaccess任何地方,也没有其他的重写规则。仅报告500是不够的,您需要阅读apache error.log并找出真正的错误消息。请检查“立即编辑”以获取完整的.htaccess。请停止制造新的问题,并参加这一个最终解决。这是工作,这是我所需要的,我想。我之前一直困惑的一个遗留问题是,所有相对于当前目录声明的图像都被重定向到site.com/eng/以及url重定向。有什么方法可以设置工作目录,还是应该设置绝对路径,或者将文件移动到site.com/eng/directory?我已经开始更改路径,它正在修复最后的问题,我就不做了,因为我已经厌倦了摆弄它。谢谢你抽出时间!
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]