Apache / PHP新手问题:
我正在尝试安装http://yourls.org/
。
所有似乎都安装好了,我可以添加新网址并缩短它们。
然而,链接产生了404.例如http://mydoma.in/4
应该重定向但不是
.htaccess文件如下所示:
# BEGIN YOURLS
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /yourls-loader.php [L]
</IfModule>
# END YOURLS
如果我浏览到页面http://mydoma.in/yourls-loader.php
,它会将我重定向到主页。
我猜测需要有一个ID参数,需要通过重写传递给/yourls-loader.php
/yourls-loader.php
看起来像这样:
<?php
// Handle inexistent root favicon requests and exit
if ( '/favicon.ico' == $_SERVER['REQUEST_URI'] ) {
header( 'Content-Type: image/gif' );
echo base64_decode( "R0lGODlhEAAQAJECAAAAzFZWzP///wAAACH5BAEAAAIALAAAAAAQABAAAAIplI+py+0PUQAgSGoNQFt0LWTVOE6GuX1H6onTVHaW2tEHnJ1YxPc+UwAAOw==" );
exit;
}
// Handle inexistent root robots.txt requests and exit
if ( '/robots.txt' == $_SERVER['REQUEST_URI'] ) {
header( 'Content-Type: text/plain; charset=utf-8' );
echo "User-agent: *\n";
echo "Disallow:\n";
exit;
}
// Start YOURLS
require_once( dirname( __FILE__ ) . '/includes/load-yourls.php' );
// Get request in YOURLS base (eg in 'http://site.dom/yourls/abcd' get 'abdc')
$request = yourls_get_request();
// Make valid regexp pattern from authorized charset in keywords
$pattern = yourls_make_regexp_pattern( yourls_get_shorturl_charset() );
// Now load required template and exit
yourls_do_action( 'pre_load_template', $request );
// At this point, $request is not sanitized. Sanitize in loaded template.
// Redirection:
if( preg_match( "@^([$pattern]+)/?$@", $request, $matches ) ) {
$keyword = isset( $matches[1] ) ? $matches[1] : '';
$keyword = yourls_sanitize_keyword( $keyword );
yourls_do_action( 'load_template_go', $keyword );
require_once( YOURLS_ABSPATH.'/yourls-go.php' );
exit;
}
// Stats:
if( preg_match( "@^([$pattern]+)\+(all)?/?$@", $request, $matches ) ) {
$keyword = isset( $matches[1] ) ? $matches[1] : '';
$keyword = yourls_sanitize_keyword( $keyword );
$aggregate = isset( $matches[2] ) ? (bool)$matches[2] && yourls_allow_duplicate_longurls() : false;
yourls_do_action( 'load_template_infos', $keyword );
require_once( YOURLS_ABSPATH.'/yourls-infos.php' );
exit;
}
// Prefix-n-Shorten sends to bookmarklet (doesn't work on Windows)
if( preg_match( "@^[a-zA-Z]+://.+@", $request, $matches ) ) {
$url = yourls_sanitize_url( $matches[0] );
if( $parse = yourls_get_protocol_slashes_and_rest( $url, array( 'up', 'us', 'ur' ) ) ) {
yourls_do_action( 'load_template_redirect_admin', $url );
$parse = array_map( 'rawurlencode', $parse );
// Redirect to /admin/index.php?up=<url protocol>&us=<url slashes>&ur=<url rest>
yourls_redirect( yourls_add_query_arg( $parse , yourls_admin_url( 'index.php' ) ), 302 );
exit;
}
}
// Past this point this is a request the loader could not understand
yourls_do_action( 'loader_failed', $request );
yourls_redirect( YOURLS_SITE, 302 );
exit;
yourls_get_request()函数如下所示:
function yourls_get_request() {
// Allow plugins to short-circuit the whole function
$pre = yourls_apply_filter( 'shunt_get_request', false );
if ( false !== $pre )
return $pre;
static $request = null;
yourls_do_action( 'pre_get_request', $request );
if( $request !== null )
return $request;
// Ignore protocol & www. prefix
$root = str_replace( array( 'https://', 'http://', 'https://www.', 'http://www.' ), '', YOURLS_SITE );
// Case insensitive comparison of the YOURLS root to match both http://Sho.rt/blah and http://sho.rt/blah
$request = preg_replace( "!$root/!i", '', $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'], 1 );
// Unless request looks like a full URL (ie request is a simple keyword) strip query string
if( !preg_match( "@^[a-zA-Z]+://.+@", $request ) ) {
$request = current( explode( '?', $request ) );
}
return yourls_apply_filter( 'get_request', $request );
}
答案 0 :(得分:3)
为了使用mod_rewrite,您可以在终端中键入以下命令:(假设您使用的是基于debian的服务器)
$sudo a2enmod rewrite
在
之后重启apache2$sudo /etc/init.d/apache2 restart
或
$sudo service apache2 restart
然后使用您的.htaccess
# BEGIN YOURLS
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /yourls-loader.php [L]
</IfModule>
# END YOURLS
答案 1 :(得分:0)
在网址上找不到网页错误网址
编辑/etc/apache2/apache2.conf
sudo nano /etc/apache2/apache2.conf
搜索强>
<Directory /var/www/>
Options Indexes FollowSymLinks
AllowOverride None
Require all granted
</Directory>
并将其更改为
<Directory /var/www/>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
,然后,强>
sudo service apache2 restart
“°º©o。,我很好地解决了这个问题。