如果这是一个重复的话,我真的很抱歉,但我用谷歌和搜索也是这里找不到任何会为我工作。也许我只是不知道究竟要搜索什么。重写规则阻挡的RewriteCond重写规则及后
不管怎样,回到我的问题:
我试图改变旧丑陋的URL网址更好(想有news/XXX/XY
,但相对链接击败了我),所以我写的代码,几行到我的.htaccess和测试他们(嗯,我实际上使用相同的代码在我的其他页面重定向,所以我知道它的工作)。我重定向从/news.php
到/news
,但查询字符串神奇的是不工作...
RewriteRule ^news.php$ /news [L,NC,R=301]
RewriteRule ^news?$ /news.php [L,NC]
RewriteCond %{THE_REQUEST} /news\?rowstart=([^\s]+) [NC]
RewriteRule^news-row-%1? [R=302,L]
RewriteCond %{THE_REQUEST} /news\?readmore=([^\s]+)&rowstart=([^\s]+) [NC]
RewriteRule^news-%1-%2? [R=302,L]
RewriteCond %{THE_REQUEST} /news\?readmore=([^\s]+) [NC]
RewriteRule^news-%1? [R=302,L]
中的RewriteRules的无后第一个被执行。但如果我改变我的.htaccess是这样的:
RewriteRule ^news.php$ /news [L,NC,R=301]
RewriteCond %{THE_REQUEST} /news\?rowstart=([^\s]+) [NC]
RewriteRule^news-row-%1? [R=302,L]
RewriteCond %{THE_REQUEST} /news\?readmore=([^\s]+)&rowstart=([^\s]+) [NC]
RewriteRule^news-%1-%2? [R=302,L]
RewriteCond %{THE_REQUEST} /news\?readmore=([^\s]+) [NC]
RewriteRule^news-%1? [R=302,L]
RewriteRule ^news?$ /news.php [L,NC]
然后它的工作。我尝试使用/\?bla
- /news\?bla
- /news\.php\?bla
等没有实际工作。
是否有人有任何想法,为什么它的行为就像这个问题以及如何解决它?它看起来像从news.php
文件开始加载后不能识别news
。
我完全地失去了,因为我不跟的.htaccess经常工作。有任何想法吗?
其实,我结束了使用此:
#########################
# NICE URLS QUERIES #
#########################
RewriteCond %{THE_REQUEST} /news(?:\.php|)\?rowstart=([^\s]+) [NC]
RewriteRule^news-page-%1? [R=302,L]
RewriteCond %{THE_REQUEST} /news\(?:\.php|)\?readmore=([^\s]+)&rowstart=([^\s]+) [NC]
RewriteRule^news-%1-%2? [R=302,L]
RewriteCond %{THE_REQUEST} /news(?:\.php|)\?readmore=([^\s]+) [NC]
RewriteRule^news-%1? [R=302,L]
RewriteRule ^news-([0-9]+)-([0-9]+)?$ news.php?readmore=$1&rowstart=$2 [L,QSA,NC]
RewriteRule ^news-([0-9]+)/?$ news.php?readmore=$1 [L,QSA,NC]
RewriteRule ^news-page-([0-9]+)/?$ news.php?rowstart=$1 [L,QSA,NC]
#######################
# OTHER NICE URLS #
#######################
RewriteRule ^news.php$ /news [L,NC,R=301]
RewriteRule ^news?$ /news.php [L,NC]
嗯,这真的很好。我实际上最终使用了类似的东西(我将代码放在我的问题中),但由于我没有使用.htaccess和apache,我只是使用ORP标志来存储.PHP文件版本。你能详细介绍一下''(?:\。php |)''吗?当我试图使用(其实我没有用''?'',它只是放在''.php''到''%1'' ...谢谢 – MiChAeLoKGB
@MiChAeLoKGB的':?'使'()'所做的分组未被捕获,所以它不能被反向引用。参见http://stackoverflow.com/questions/10804732/what-is-the-difference-between-and-in-regex它基本上意味着可以是一个'.php'或没有,使得'.php'可选如果您删除':?',括号成为捕获分组和'%1'最终会逆向引用它,而不是 –
感谢有关信息,所以我使用了部分代码和我的代码的一部分,现在它的工作原理...它很繁琐,以改变CMS上的URL ... .htaccess它的好,但你仍然必须改变谁知道白痴链接多少个文件:D Anway,谢谢你的帮助。 – MiChAeLoKGB