htaccess RewriteEngine URL解释

时间:2018-04-05 23:34:51

标签: php .htaccess url redirect

最近我改变了我的网站工作方式 - 每篇文章的物理页面与没有物理(子)页面的动态加载内容,但我意识到我不能简单地上传新的网站文件,因为我会打破所有的社交平台分享链接,计数器和东西,因为有数千个子页面。

我听说(我知道)通过.htaccess和RewriteEngine(我需要使用RewriteEngine,因为htaccess中的所有代码都是为它做的)我可以根据实际的URL在内部加载完全不同的页面,例如,例如,如果我有一个实际的URL链接到我的一个子页面:

  

http://sub.mypage.com/php/somearticle.php?j=en

...所以如果不更改URL的文本,它将在内部加载我的新站点文件的原理不同,如下所示:

  

http://sub.mypage.com/?s=somearticle&j=en

现在我还需要那些变量" j"和#34; somearticle"要动态,或者更好地说它们需要完全按照地址栏中的物理URL进行复制(其中" somearticle"实际上是原始物理php文件的名称和" j&# 34;只是语言变量),因为它每次都是别的东西,所以我不需要为每个具体的子页面在htaccess中创建数千行 - 我需要一些管理所有子页面的通用代码(因为所有的原则都是一样的,只是php名称更改,有时候是language = variable" j"),你知道吗?

那么有人可以帮我告诉我这个实现的确切语法/代码吗?

修改

所以我自己玩了一下,如果我手动设置子页面,这似乎有效(注意:只是一个澄清 - 这是我的localhost:8081因此我有服务器的第一个条件cos我有不同的版本,有不同的路径index.php)+我稍微更新变量j部分thanx到@Ben的帖子:

# LOAD PAGE DIFFERENT INTERNALLY - LOCALHOST
RewriteCond %{HTTP_HOST} ^localhost:8081 [NC]
RewriteCond %{REQUEST_URI} /php/(.*)\.php$ [NC]
RewriteRule ^php/(.*).php$ /WWW/_PHP_/lego/index.php?s=$1 [QSA,L]

但遗憾的是由于某种原因它会影响我网站上的每个页面,不仅影响/ php / 下的页面,所以当我点击进入我的第一个(默认/初始= index.php)页面时打破它(它包含所有文章的摘要 - 它们没有加载) - 任何人都知道为什么,拜托?

解决

因此,在对@ Ben的代码进行小的更改后,这是正确的解决方案,因此我将他的解决方案作为正确的解决方案(因为它实际上可以正常工作,因为如果页面将在服务器上,那么因为它是我的测试版本在我的localhost上,其中/ php /目录的路径不同))

LOAD PAGE DIFFERENT INTERNALLY - localhost
RewriteCond %{HTTP_HOST} ^localhost:8081 [NC]
RewriteCond %{REQUEST_URI} /php/([a-zA-Z0-9\-]+).php [NC]
RewriteRule ^ index.php?s=%1 [QSA,L]

1 个答案:

答案 0 :(得分:1)

REQUEST_URI是请求的URI的路径组件,例如/php/somearticle.php,但不包含查询字符串,例如?j=en

RewriteCond模式,!字符(感叹号)用于否定条件的结果。要使用某些模式作为前缀,请使用^字符(插入符号),匹配行的开头。

%1是RewriteCond反向引用,提供对模式的分组部分(括号内)的访问。

QSA标志,如果替换URI包含查询字符串,则查询字符串(如?j=en)将附加到新重写的uri。

RewriteCond %{REQUEST_URI} ^/php/([a-zA-Z0-9\-]+).php [NC]
RewriteRule ^ index.php?s=%1 [QSA,L]

另请参阅:Apache Module mod_rewriteRewriteRule Flags